﻿/**
 * \brief TCP连接线程定义
 * \file CTcpThread.h
 */
#ifndef __CTCP__THREAD__H
#define __CTCP__THREAD__H

#include <list>
#include <queue>
#include <vector>

#include "CThread.h"
#include "Mutex.h"


class CTcpTask;
class CTcpTaskPool;

class CTcpThread : public CThread
{
	public:
		typedef std::list<CTcpTask*> _task_list;
		typedef _task_list::iterator _task_list_iter;

		typedef std::queue<CTcpTask*> _task_queue;

		typedef std::vector<epoll_event*> _event_vec;
		typedef _event_vec::iterator _event_vec_iter;

	public:
		CTcpThread(CTcpTaskPool* _pool, int _eventSize);
		virtual ~CTcpThread();

	public:
		/// 线程主回调函数
		virtual void run() = 0;

		/// 加入到任务等待队列
		void push(CTcpTask* _pTask);

	protected:
		/// 转移到任务列表
		void shift();

		/// 加入任务列表
		virtual void add(CTcpTask* _pTask) = 0;

		/// 从任务列表删除
		void remove(CTcpTask* _pTask);

		/// 从任务列表删除
		virtual void remove(_task_list_iter& _iter) = 0;

	protected:
		_task_list _M_list;			/// 任务列表
		_task_queue _M_queue;			/// 任务等待队列

		CTcpTaskPool* _M_pool;			/// 任务池指针

		_event_vec _M_events;			/// epoll事件集合
		int _M_epfd;				/// epoll描述符
		int _M_eventSize;			/// 关注事件个数

		CMutex _M_mutex;			/// 互斥锁
};

#endif	/// __CTCP__THREAD__H

